<?php

namespace DatMoment\VideoBundle\Metier\Operations;

use DatMoment\VideoBundle\Entity\Appreciation;
use Symfony\Component\Security\Core\Exception;

class AppreciationOperations {
    
    private $appreciation;
    private $entityManager;
    private $appreciationRepository;
    
    public function __construct($pentityManager) {
        $this->entityManager = $pentityManager;
        $this->appreciationRepository = $this->entityManager->getRepository('DatMomentVideoBundle:Appreciation');
    }
    
    public function createAppreciation($pcommentaire, $pnote, $puser, $pvideo) {
        $this->appreciation = new Appreciation();
        $this->appreciation->setCommentaire($pcommentaire);
        $this->appreciation->setNote($pnote);
        $this->appreciation->setUser($puser);
        $this->appreciation->setVideo($pvideo);
    }
    
    public function getAppreciation() {
        return $this->appreciation;
    }
    
    public function initialisationAppreciation($pappreciation) {
        $this->appreciation = $pappreciation;
    }
    
    /**
     * 
     * @param video $pvideo, vérifiez que $pvideo est un ID sinon ça marche pas.
     * @return type
     */
    public function findAllAppreciationByVideo($pvideo) {
        if ($pvideo.getId() == null) {
            throw new Exception\InvalidArgumentException("AppreciationOperations.php : L'objet n'a pas d'ID il faut qu'il soit en BDD");
        }
        else {
            $queryBuilder = $this->entityManager->createQueryBuilder()
                ->select('appr')
                ->from('DatMomentVideoBundle:Appreciation','appr')
                ->where('appr.video = :id')
                ->setParameter('id', $pvideo.getId());
            $query = $queryBuilder->getQuery();
            $results = $query->getResult();
            return $results;
        }
    }
    
    
        public function getAppreciationByVideos($pvideo, $pnbVideos, $page) {
        $offset = ($page-1) * $pnbVideos;
        
        $listVideos = $this->videoRepository->findBy(
               array('id' => $pvideo->getId()),       // Critères clause Where en array
               array('dateAdd' => 'desc'),       // Array de OrderBy
               $pnbVideos,                      // Limit, nombre de récupérations
               $offset);                       // Offset, à partir de quand on recup si 0 au début
        
        return $listVideos;
    }
    
    
    public function persist() {
        if ($this->appreciation != null) {
            $this->entityManager->persist($this->appreciation);
            $this->entityManager->flush();
        }
        else {
            throw new Exception\InvalidArgumentException("AppreciationOperations.php : L'objet est mal renseigné et n'a pas pu être persisté");
        }
    }
}

?>
